package com.dubbo.common.money;

import com.dubbo.common.MathUtils;
import com.dubbo.common.check.CheckUtil;

/**
 * 价格工具类
 * @author chenwei
 * @date 2018年12月13日 下午5:06:46
 */
public class MoneyUtils {
	
	
	/**
	 * 将元为单位的金额转换为分为单位的整数金额
	 * 
	 * @author chenwei
	 * @date 2018年12月13日 下午5:13:30
	 * @param money
	 * @return
	 */
	public static String toCentByString(String money) {
		if(!CheckUtil.checkMoney(money)) {
    		throw new NullPointerException("金额格式错误~");
    	}
    	try {
    		money = toCent(money);//补齐两位小数
    		//判断price去掉小数点后的整数是否在long类型的取值范围内
    		return Long.parseLong(money.replaceAll("\\.", "")) + "";
		} catch (Exception e) {
			throw new NullPointerException("金额格式错误,超出long类型的取值范围~");
		}
	}
	
	
	/**
	 * 将元为单位的金额转换为分为单位的整数金额
	 * 
	 * @author chenwei
	 * @date 2018年12月13日 下午5:13:30
	 * @param money
	 * @return
	 */
	public static long toCentByLong(String money) {
		if(!CheckUtil.checkMoney(money)) {
			throw new NullPointerException("金额格式错误~");
		}
		try {
			money = toCent(money);//补齐两位小数
			//判断price去掉小数点后的整数是否在long类型的取值范围内
			return Long.parseLong(money.replaceAll("\\.", ""));
		} catch (Exception e) {
			throw new NullPointerException("金额格式错误,超出long类型的取值范围~");
		}
	}
	/**
	 * 补齐两位小数,不足两位小数补零
	 * 
	 * @author chenwei
	 * @date 2018年12月13日 下午5:20:02
	 * @param money
	 * @return
	 */
	public static String toCent(String money) {
		money = MathUtils.fileZeroSuffix(money);//去除掉小数点后面多余的零
		if(money.indexOf(".") > 0) {
			String priceSub = money.substring(money.indexOf(".")+1);
			if(priceSub.length() == 1) {//如果只有一个小数,则不上一个零
				money += "0";
			}
		}else {//如果是整数则不上两个零
			money += "00";
		}
		return money;
	}
	

	
//	public static void main(String[] args) {
//		BigDecimal bigDecimal = new BigDecimal("12.2399");
//		BigDecimal bigDecimal2 = new BigDecimal("189992.55858");
//		bigDecimal = bigDecimal.add(bigDecimal2);
//		//
//		System.out.println();
//	}
}
